package com.bzkj.basicinfo.mapper;

import com.bzkj.basicinfo.domain.CustomerMapping;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 往来单位映射关系Mapper接口
 * 
 * @author system
 * @date 2025-01-29
 */
@Mapper
public interface CustomerMappingMapper {
    
    /**
     * 查询往来单位映射关系
     *
     * @param id 往来单位映射关系主键
     * @return 往来单位映射关系
     */
    CustomerMapping selectCustomerMappingById(Long id);

    /**
     * 查询往来单位映射关系列表
     *
     * @param customerMapping 往来单位映射关系
     * @return 往来单位映射关系集合
     */
    List<CustomerMapping> selectCustomerMappingList(CustomerMapping customerMapping);

    /**
     * 新增往来单位映射关系
     *
     * @param customerMapping 往来单位映射关系
     * @return 结果
     */
    int insertCustomerMapping(CustomerMapping customerMapping);

    /**
     * 修改往来单位映射关系
     *
     * @param customerMapping 往来单位映射关系
     * @return 结果
     */
    int updateCustomerMapping(CustomerMapping customerMapping);

    /**
     * 删除往来单位映射关系
     *
     * @param id 往来单位映射关系主键
     * @return 结果
     */
    int deleteCustomerMappingById(Long id);

    /**
     * 批量删除往来单位映射关系
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteCustomerMappingByIds(Long[] ids);

    /**
     * 检查映射关系是否已存在
     *
     * @param msfxCustomerId 码上放心客户ID
     * @param erpCustomerCode ERP客户编码
     * @return 映射关系
     */
    CustomerMapping checkMappingExists(@Param("msfxCustomerId") String msfxCustomerId, 
                                     @Param("erpCustomerCode") String erpCustomerCode);

    /**
     * 根据码上放心客户ID查询映射关系
     *
     * @param msfxCustomerId 码上放心客户ID
     * @return 映射关系
     */
    CustomerMapping selectByMsfxCustomerId(@Param("msfxCustomerId") String msfxCustomerId);

    /**
     * 根据ERP客户编码查询映射关系
     *
     * @param erpCustomerCode ERP客户编码
     * @return 映射关系
     */
    CustomerMapping selectByErpCustomerCode(@Param("erpCustomerCode") String erpCustomerCode);

    /**
     * 根据码上放心客户ID查询所有映射关系（支持一对多）
     *
     * @param msfxCustomerId 码上放心客户ID
     * @return 映射关系列表
     */
    List<CustomerMapping> selectAllByMsfxCustomerId(@Param("msfxCustomerId") String msfxCustomerId);

    /**
     * 获取已映射的码上放心客户ID列表
     *
     * @return 客户ID列表
     */
    List<String> selectMappedMsfxCustomerIds();

    /**
     * 获取已映射的ERP客户编码列表
     *
     * @return 客户编码列表
     */
    List<String> selectMappedErpCustomerCodes();

    /**
     * 查询所有码上放心客户的映射关系（优化性能）
     *
     * @return 映射关系列表
     */
    List<CustomerMapping> selectAllMsfxMappings();

    /**
     * 查询所有ERP客户的映射关系（优化性能）
     *
     * @return 映射关系列表
     */
    List<CustomerMapping> selectAllErpMappings();

    /**
     * 根据码上放心客户ID列表查询映射关系
     *
     * @param customerIds 客户ID列表
     * @return 映射关系列表
     */
    List<CustomerMapping> selectMappingsByMsfxCustomerIds(@Param("customerIds") List<String> customerIds);

    /**
     * 根据ERP客户编码列表查询映射关系
     *
     * @param erpCustomerCodes ERP客户编码列表
     * @return 映射关系列表
     */
    List<CustomerMapping> selectMappingsByErpCustomerCodes(@Param("erpCustomerCodes") List<String> erpCustomerCodes);
}
